const jwt = require('jsonwebtoken')

const {JWT_SECRET} = require('../config/config.default') //引入私钥
const {tokenExpiredError,invalidToken,hasNotAdminPermission} = require('../constants/err.type')

// 验证token中间件
const auth = async (ctx,next) => {
    // 提取出请求头上的token
    const {authorization} = ctx.request.header
    const token = authorization.replace('Bearer ','')
    // console.log(token)

    try{
        //验证token 
        const user = jwt.verify(token,JWT_SECRET) //user中包含了payload的信息（id,user_name,is_admin）
        // console.log(user)
        ctx.state.user = user //保存用户信息
    }catch(err){
        switch(err.name){
            case 'TokenExpiredError':
                console.error('token已过期',err)
                return ctx.app.emit('error',tokenExpiredError,ctx)
            case 'JsonWebTokenError':
                console.error('无效的token',err)
                return ctx.app.emit('error',invalidToken,ctx)    
        }
    }

    await next()
} 

// token授权
const hadAdminPermission = async (ctx, next) => {
    const { is_admin } = ctx.state.user

    if(!is_admin){
        console.error('该用户没有管理员的权限')
        return ctx.app.emit('error',hasNotAdminPermission,ctx)
    }

    await next()
}

module.exports = {
    auth,
    hadAdminPermission,
}